/*******************************************************************************
* Copyright (c) 2008, Jeferson Jose de Miranda                                 *
* UDESC - Universidade do Estado de Santa Catarina                             *
* All rights reserved.                                                         *
*                                                                              *
* Redistribution and use in source and binary forms, with or without           *
* modification, are permitted provided that the following conditions are met:  *
*     * Redistributions of source code must retain the above copyright         *
*       notice, this list of conditions and the following disclaimer.          *
*     * Redistributions in binary form must reproduce the above copyright      *
*       notice, this list of conditions and the following disclaimer in the    *
*       documentation and/or other materials provided with the distribution.   *
*     * Neither the name of the Universidade do Estado de Santa Catarina nor   *
*       the names of its contributors may be used to endorse or promote        *
*       products derived from this software without specific prior written     *
*       permission.                                                            *
*                                                                              *
* THIS SOFTWARE IS PROVIDED BY JEFERSON JOSE DE MIRANDA "AS IS" AND ANY        *
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED    *
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE       *
* DISCLAIMED. IN NO EVENT SHALL JEFERSON JOSE DE MIRANDA BE LIABLE FOR ANY     *
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES   *
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND  *
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF     *
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.            *
*******************************************************************************/

/**
 * \file Exceptions.hpp
 *
 * \brief Defines the exceptions throwed by the Move-In API.
 *
 * \author Jeferson Jose de Miranda
 */

#ifndef EXCEPTIONS_HPP
#define EXCEPTIONS_HPP

// (C++) Standard exceptions.
#include <iostream>
#include <exception>

namespace MoveIn
{
    /**
    * \class OutOfMemory
    *
    * \brief Sets "out of memory" exception.
    */
    class OutOfMemory : public std::exception
    {
        virtual const char* what() const throw()
        {
            return "Out of memory!";
        }
    };

    /**
    * \class DifferentType
    *
    * \brief Sets "different type" exception.
    */
    class DifferentType : public std::exception
    {
        virtual const char* what() const throw()
        {
            return "Source images have not the same attributes!";
        }
    };

    /**
    * \class DifferentSize
    *
    * \brief Sets "different size" exception.
    */
    class DifferentSize : public std::exception
    {
        virtual const char* what() const throw()
        {
            return "Source images are not of the same size!";
        }
    };

    /**
    * \class OutOfBounds
    *
    * \brief Sets "out of bounds" exception.
    */
    class OutOfBounds : public std::exception
    {
        virtual const char* what() const throw()
        {
            return "Index parameter is out of bounds!";
        }
    };

    /**
    * \class CameraNotFound
    *
    * \brief Sets "camera not found" exception.
    */
    class CameraNotFound : public std::exception
    {
        virtual const char* what() const throw()
        {
            return "Could not find camera at specified index!";
        }
    };

    /**
    * \class ROIOutOfBounds
    *
    * \brief Sets "ROI out of bounds" exception.
    */
    class ROIOutOfBounds : public std::exception
    {
        virtual const char* what() const throw()
        {
            return "Provided Region of Iterest is out of image bounds!";
        }
    };
}

#endif
